import router from "./router";
import store from "./store";
import { Message } from "element-ui";
import NProgress from "nprogress";
import 'nprogress/nprogress.css'
import { getToken } from "./utils/auth";
import { isRelogin } from "./utils/request";

NProgress.configure({showSpinner: false})

const whiteList = ['/login','/register']

router.beforeEach((to, from, next) =>{
    // 开始进度条
    NProgress.start();
    console.log('start to getToken()..cookies.get()..')
    if(getToken()){
        console.log('Fetch Cookies... getToken()..cookies.get()..0')
        to.meta.title && store.dispatch('settings/setTitle', to.meta.title)
        console.log('Fetch Cookies... getToken()..cookies.get()..1')
        if(to.path === '/login'){
            console.log('Fetch Cookies... getToken()..cookies.get()..2')
            next({path: '/'})
             // 结束进度条
            NProgress.done()
        }
        else if(whiteList.indexOf(to.path) !== -1){
            console.log('Fetch Cookies... getToken()..cookies.get()..3')
            next()
        } 
        else 
        {
            console.log('Fetch Cookies... getToken()..cookies.get()..4...==================get store/index.js/user/roles properties value..')
            if(store.getters.roles.length === 0){
                console.log('Fetch Cookies... getToken()..cookies.get()..5 ==================')
                isRelogin.show = false
                console.log('Fetch Cookies... getToken()..cookies.get()..GetInfo()...')
                // 判断当前用户是否已经拉取玩user_info信息
                store.dispatch('GetInfo').then(()=>{
                    console.log('Fetch Cookies... getToken()..cookies.get()..7')
                    isRelogin.show = false
                    store.dispatch('GenerateRoutes').then(accessRoutes =>{
                        // 根据roles权限生成可访问路由表
                        router.addRoutes(accessRoutes)  // 动态添加可访问路由表
                        next({...to, replace : true})   // hack方法， 确保addRoutes完成
                    })
                }).catch(err =>{
                    store.dispatch('LogOut').then(()=>{
                        Message.error(err)
                        next({path:'/'})
                    })
                })
            }
            else{
                console.log('Fetch Cookies... getToken()..cookies.get()..6')
                next()
            }
        }
    }
    else {
        console.log('There is no Cookies... getToken()..cookies.get()..')
        // 没有token
        if(whiteList.indexOf(to.path) !== -1){
            // 在免登录白名单，直接进入
            next();
        }
        else {
            next(`/login?redirect=${encodeURIComponent(to.fullPath)}`)   // 否则全部重定向到登录页
            NProgress.done()
        }
    }

})


router.afterEach(()=>{
    NProgress.done();
})